#include "linklist.h"

list count3(list head)
{
    if(is_empty(head))
        return NULL;

    if(head->next == head)
        return head;

    // 循环删除，直到链表只剩2个节点
    while(head->next->next != head)
    {
        list p = head->next->next;
        head = remove_node(p);
        free(p);
    }
}

int main(int argc, char const *argv[])
{
    // 初始化一条空的循环单链表
    list head = init_list();

    int n;
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
        // 新增节点，并更新头指针（必须）
        head = add_list_tail(head, new_node(i));
    }
    show(head);

    // 约瑟夫游戏，数3出局，最后剩下2个节点结束
    // 返回新的头指针
    head = count3(head);
    show(head);

    return 0;
}
